#ifndef PICCOLO_WINDOW_H
#define PICCOLO_WINDOW_H

#include "Event/PMouseInputEvent.h"
#include "Graphics/PiccoloVKGraphicsContext.h"

#include "PiccoloEngine.h"

namespace Piccolo
{
    class PiccoloWindow
    {
    public:
        PiccoloWindow(const PiccoloWindow&) = delete;
        PiccoloWindow &operator=(const PiccoloWindow&) = delete;
        virtual ~PiccoloWindow() = default;

        static std::unique_ptr<PiccoloWindow> Create(uint32_t width, uint32_t height, const char *title);

        virtual bool ShouldClose() = 0;
        virtual void PollEvents() = 0;
        virtual void SwapBuffer() = 0;

        virtual void* GetImplWindowPointer() const = 0;

        virtual void GetMousePos(glm::vec2 &mousePos) const = 0;
        virtual bool IsMouseDown(EMouseButton mouseButton = MOUSE_BUTTON_LEFT) const = 0;
        virtual bool IsMouseUp(EMouseButton mouseButton = MOUSE_BUTTON_LEFT) const = 0;
        virtual bool IsKeyDown(EKey key) const = 0;
        virtual bool IsKeyUp(EKey key) const = 0;

    protected:
       PiccoloWindow() = default;
    };
}

#endif